import type {Router} from "vue-router";
import {hideFullScreenLoading, showFullScreenLoading, toast} from "@/utils/useLayer";
import {getToken} from "@/utils/useAccess";

/**
 * 通用守卫配置
 * @param router
 */
// function setupCommonGuard(router: Router) {
//     router.beforeEach(() => {
//     })
//
//     router.afterEach(() => {
//     })
// }

/**
 * 权限访问守卫配置
 * @param router
 */
function setupAccessGuard(router: Router) {

    router.beforeEach((to, from, next) => {
        // 切换路由前，显示加载进度条
        showFullScreenLoading()
        // 验证是否登录
        const hasToken = getToken();
        if (!hasToken && to.path !== '/login') {
            toast('登录失效, 请重新登录', 'error')
            return next({path: '/login'})
        }
        // 当前是否已登录
        if (hasToken && to.path === '/login') {
            toast('请先退出登录', 'warning')
            return next({path: from.path ? from.path : '/',})
        }

        // 防止重复添加路由
        // let hasNewRoutes = false;
        // 如果获取到了登录态token
        next()
    });

    router.afterEach((to, from, next) => {
        // 设置页面标题  ??空值合并运算符 处理左侧为null | undefined，0和false不做处理直接返回itself
        document.title = to.meta?.title ? `${to.meta.title} - Blue Admin` : 'Blue Admin';
        // 路由切换后, 加载进度结束
        hideFullScreenLoading()
    });
}

/**
 * 项目守卫配置
 * @param router
 */
export function createRouteGuard(router: Router) {
    /** 通用守卫 */
    // setupCommonGuard(router)
    /** 权限守卫 */
    setupAccessGuard(router)
}

